﻿// Пример многомерных индексаторов

using System;

class MultidemensionalIndexersDemo
{
    public static void _Main()
    {
        int rows = 10;
        int cols = 4;
        SafeFail2D sf = new SafeFail2D(rows, cols);

        // Заполняем данные
        for (int i = 0; i < rows; i++)
        {
            for (int j = 0; j < cols; j++)
            {
                sf[i, j] = i * j;
            }
        }

        // Выводим данные
        for (int i = 0; i < cols; i++)
        {
            for (int j = 0; j < rows; j++)
            {
                Console.Write("{0}\t", sf[j + 1, i]); // sf[j+1, i] - Ошибка. Вывод: -1
            }
            Console.WriteLine();
        }
        Console.ReadLine();
    }
}

class SafeFail2D
{
    int[,] a;
    int rows;
    int cols;
    public bool ok;
    public int Length;

    public SafeFail2D(int r, int c)
    {
        rows = r;
        cols = c;
        a = new int[r, c];
        Length = r * c;
    }

    public int this[int index1, int index2]
    {
        get
        {
            if (IsOK(index1, index2))
            {
                ok = true;
                return a[index1, index2];                
            }
            else
            {
                ok = false;
                return -1;                
            }
        }
        set
        {
            if (IsOK(index1, index2))
            {
                ok = true;
                a[index1, index2] = value;
            }
            else
            {
                ok = false;
            }
        }
    }
    public bool IsOK(int index1, int index2)
    {
        if ((index1 >=0) && (index1 < rows) && (index2 >=0) && (index2 < cols))
            return true;
        else
            return false;
    }
}